package GUILag;

import java.awt.Color;
import java.awt.Component;
import java.util.Calendar;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import ModelLag.*;
import KontrolLag.*;

public class GUI_Customtablecellrenderer extends DefaultTableCellRenderer 
{
	


	@SuppressWarnings("finally")
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
	{
		Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		
		try 
		{
			GUI_Buffer buffer = GUI_Buffer.getInstance();
			
			IndlaeggelsesCtr iCtr = new IndlaeggelsesCtr();
			HandlingsCtr hCtr = new HandlingsCtr();
			Indlaeggelse i = buffer.getIndlaeggelsesIndex(row);
			
			c.setBackground(Color.WHITE);
			if(column == 0)
			{
				if(value == null)
				{
					
				}
				else
				{
					String v = value.toString();
					if(v.length() == 0)
					{
						
					}
					else
					{
						String patientNavn = "";
						if(i.getPatient().getNavn() != null)
						{
							patientNavn = i.getPatient().getNavn().trim();
						}
						if(v.trim() != patientNavn)
						{
							i.getPatient().setNavn(v);
							iCtr.opdaterIndlaeggelse(i);
						}
						
						
					}
				}
			}
			
			if(column == 1)
			{
				table.setValueAt(i.getIndlaeggelsesDato()+"  "+i.getIndlaeggelsesTidspunkt(), row, column);
			}
			
			if(column == 2)
			{
				if(value == null)
				{
					
				}
				else
				{
					String v = value.toString();
					if(v.length() == 0)
					{
						
					}
					else
					{
						String v1 = null;
						if(v.equals("true") || v.equals("ja"))
						{
							table.setValueAt("ja", row, column);
							v1 = "ja";
							
						}
						if(v.equals("false") || v.equals("nej"))
						{
							table.setValueAt("nej", row, column);
							v1 = "nej";
						}
						if(v1 != null)
						{
							boolean statement;
							if(v1 == "ja")
							{
								statement = true;
								if(statement != i.getPatient().isTvang())
								{
									i.getPatient().setTvang(true);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
							if(v1 == "nej")
							{
								statement = false;

								if(statement != i.getPatient().isTvang())
								{
									i.getPatient().setTvang(false);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
						}
						else
						{
							if(i.getPatient().isTvang() == true)
							{
								table.setValueAt("ja", row, column);
							}
							else
							{
								table.setValueAt("nej", row, column);
							}
							
						}
					}
				}
			}
			
			if(column == 3)
			{
				if(value == null)
				{
					
				}
				else
				{
					String v = value.toString();
					if(v.length() == 0)
					{
						
					}
					else
					{
						String v1 = null;
						if(v.equals("true") || v.equals("ja"))
						{
							table.setValueAt("ja", row, column);
							v1 = "ja";
							
						}
						if(v.equals("false") || v.equals("nej"))
						{
							table.setValueAt("nej", row, column);
							v1 = "nej";
						}
						if(v1 != null)
						{
							boolean statement;
							if(v1 == "ja")
							{
								statement = true;
								if(statement != i.getPatient().isUdgang())
								{
									i.getPatient().setUdgang(true);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
							if(v1 == "nej")
							{
								statement = false;

								if(statement != i.getPatient().isUdgang())
								{
									i.getPatient().setUdgang(false);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
						}
						else
						{
							if(i.getPatient().isUdgang() == true)
							{
								table.setValueAt("ja", row, column);
							}
							else
							{
								table.setValueAt("nej", row, column);
							}
							
						}
					}
				}
				
			}
			
			if(column == 4)
			{
				
			}
			
			if(column == 5)
			{
				Handling gafScore = i.getGafScores().get(i.getGafScores().size()-1);
				if(value == null)
				{
					System.out.println("hejGAF1");
					if(gafScore.getScore() != 0)
					{
						table.setValueAt(gafScore.getScore(), row, column);
						System.out.println("hejGAF3");
					}
					else
					{
						table.setValueAt(gafScore.getUdloebsDato()+"  "+gafScore.getUdloebsTidspunkt(), row, column);
						System.out.println("hejGAF4");
					}
				}
				else
				{
					String v = value.toString();
					if(v.length() == 0)
					{
						c.setBackground(Color.RED);
						table.setValueAt(gafScore.getUdloebsDato()+ "  " + gafScore.getUdloebsTidspunkt(), row, column);
					}
					else
					{
						
						if(isInteger(v) && v.length() < 3)
						{
							c.setBackground(Color.GREEN);
							if(Integer.parseInt(v) != gafScore.getScore())
							{
								gafScore.setScore(Integer.parseInt(v));
								Calendar c1 = Calendar.getInstance();
								gafScore.setGennemfoertDato(Integer.toString(c1.get(c1.DAY_OF_MONTH))+"/"
								+Integer.toString(c1.get(c1.MONTH)+1)+"-"+Integer.toString(c1.get(c1.YEAR)));
								gafScore.setGennemfoertTidspunkt(Integer.toString(c1.get(c1.HOUR_OF_DAY))+":"
								+Integer.toString(c1.get(c1.MINUTE)));
								iCtr.opdaterIndlaeggelse(i);
								
							}
							else
							{
								
							}
						}
						
						else
						{
							c.setBackground(Color.RED);
							table.setValueAt(gafScore.getUdloebsDato()+ "  " + gafScore.getUdloebsTidspunkt(), row, column);
						}
						
						
					}
				}
			}
			
			if(column == 6)
			{
				//ikke implementeret endnu;
				
			}
			
			if(column == 7)
			{
				if(value == null)
				{
					
				}
				else
				{
					String v = value.toString();
					if(v.length() == 0)
					{
						
					}
					else
					{
						String v1 = null;
						if(v.equals("true") || v.equals("ja"))
						{
							table.setValueAt("ja", row, column);
							v1 = "ja";
							
						}
						if(v.equals("false") || v.equals("nej"))
						{
							table.setValueAt("nej", row, column);
							v1 = "nej";
						}
						if(v1 != null)
						{
							boolean statement;
							if(v1 == "ja")
							{
								statement = true;
								if(statement != i.getPatient().isSelvmordsrisiko())
								{
									i.getPatient().setSelvmordsrisiko(true);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
							if(v1 == "nej")
							{
								statement = false;

								if(statement != i.getPatient().isSelvmordsrisiko())
								{
									i.getPatient().setSelvmordsrisiko(false);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
						}
						else
						{
							if(i.getPatient().isSelvmordsrisiko() == true)
							{
								table.setValueAt("ja", row, column);
							}
							else
							{
								table.setValueAt("nej", row, column);
							}
							
						}
					}
				}
				
			}
			
			if(column == 8)
			{
				Handling bPlan =  null;
				if(i.getBehPlaner().size() == 2)
				{
					if(i.getBehPlaner().get(0).getGennemfoertDato() == null || i.getBehPlaner().get(0).getGennemfoertDato().length() == 0 || i.getBehPlaner().get(0).getGennemfoertDato().matches("null"))
					{
						bPlan = i.getBehPlaner().get(0);
						if(value == null || value.toString().length() == 0 || value.toString() == "null  null")
						{
							if(bPlan.getPlanlagtDato() != null && !bPlan.getPlanlagtDato().matches("null"))
							{
								c.setBackground(Color.yellow);
								table.setValueAt(bPlan.getPlanlagtDato()+ "  "+ bPlan.getPlanlagtTidspunkt(), row, column);
							}
							else
							{
								c.setBackground(Color.red);
								table.setValueAt(bPlan.getUdloebsDato()+ "  "+ bPlan.getUdloebsTidspunkt(), row, column);
								
							}
						}
						else if(isInteger(value.toString()) && value.toString().trim().length() <= 3)
						{
							if(bPlan.getGennemfoertDato() == null)
							{
								c.setBackground(Color.green);
								Calendar c2 = Calendar.getInstance();
								String dato = Integer.toString(c2.get(c2.DAY_OF_MONTH))+"/"+Integer.toString(c2.get(c2.MONTH)+1)+
										"-"+Integer.toString(c2.get(c2.YEAR));
								bPlan.setGennemfoertDato(dato);
								String tidspunkt = Integer.toString(c2.get(c2.HOUR_OF_DAY))+":"
										+Integer.toString(c2.get(c2.MINUTE));
								bPlan.setGennemfoertTidspunkt(tidspunkt);
								iCtr.opdaterIndlaeggelse(i);
								table.setValueAt(bPlan.getGennemfoertDato()+ "  "+ bPlan.getGennemfoertTidspunkt(), row, column);
								
							}
							else
							{
								
								c.setBackground(Color.green);
								table.setValueAt(bPlan.getGennemfoertDato()+ "  "+ bPlan.getGennemfoertTidspunkt(), row, column);
							}
						}

						
						else
						{
							if((bPlan.getGennemfoertDato() == null && bPlan.getPlanlagtDato() == null) || (bPlan.getGennemfoertDato().matches("null") && bPlan.getPlanlagtDato().matches("null")))
							{
								c.setBackground(Color.red);
								table.setValueAt(bPlan.getUdloebsDato()+ "  "+ bPlan.getUdloebsTidspunkt(), row, column);
							}

							else
							{
								c.setBackground(Color.green);
								table.setValueAt(bPlan.getGennemfoertDato()+ "  "+ bPlan.getGennemfoertTidspunkt(), row, column);
							}
						}
					}
					else
					{
						bPlan = i.getBehPlaner().get(1);
						if(value == null || value.toString().length() == 0 || value.toString().trim() == "null  null")
						{
							if(bPlan.getGennemfoertDato()!= null || bPlan.getGennemfoertDato().length() !=  0)
							{
								c.setBackground(Color.green);
								table.setValueAt(bPlan.getGennemfoertDato()+ "  "+ bPlan.getGennemfoertTidspunkt(), row, column);
							}
							if(bPlan.getPlanlagtDato() != null && bPlan.getPlanlagtDato() != "null" && bPlan.getPlanlagtDato().length() != 0 )
							{
								c.setBackground(Color.yellow);
								table.setValueAt(bPlan.getPlanlagtDato()+ "  "+ bPlan.getPlanlagtTidspunkt(), row, column);
							}
							else
							{
								c.setBackground(Color.red);
								table.setValueAt(bPlan.getUdloebsDato()+ "  "+ bPlan.getUdloebsTidspunkt(), row, column);
								
							}
						}
						if(value.toString().equals(bPlan.getUdloebsDato()+ "  "+ bPlan.getUdloebsTidspunkt()))
						{
							c.setBackground(Color.red);
						}
						if(isInteger(value.toString()) && value.toString().trim().length() <= 3)
						{
							if(bPlan.getGennemfoertDato() == null)
							{
								c.setBackground(Color.green);
								Calendar c2 = Calendar.getInstance();
								String dato = Integer.toString(c2.get(c2.DAY_OF_MONTH))+"/"+Integer.toString(c2.get(c2.MONTH)+1)+
										"-"+Integer.toString(c2.get(c2.YEAR));
								bPlan.setGennemfoertDato(dato);
								String tidspunkt = Integer.toString(c2.get(c2.HOUR_OF_DAY))+":"
										+Integer.toString(c2.get(c2.MINUTE));
								bPlan.setGennemfoertTidspunkt(tidspunkt);
								iCtr.opdaterIndlaeggelse(i);
								table.setValueAt(bPlan.getGennemfoertDato()+ "  "+ bPlan.getGennemfoertTidspunkt(), row, column);
								
							}
							else
							{
								c.setBackground(Color.green);
								table.setValueAt(bPlan.getGennemfoertDato()+ "  "+ bPlan.getGennemfoertTidspunkt(), row, column);
							}
						}
						else
						{
							if(bPlan.getGennemfoertDato() == null && bPlan.getPlanlagtDato() == null)
							{
								c.setBackground(Color.red);
								table.setValueAt(bPlan.getUdloebsDato()+ "  "+ bPlan.getUdloebsTidspunkt(), row, column);
							}
							
							
							else
							{
								c.setBackground(Color.green);
								table.setValueAt(bPlan.getGennemfoertDato()+ "  "+ bPlan.getGennemfoertTidspunkt(), row, column);
							}
						}
						
					}
				}
				else
				{
					//ikke implementeret endnu
				}
			}
			if(column == 9)
			{
				Handling bPlan =  null;
				if(i.getBehPlaner().size() == 2)
				{
					if(i.getBehPlaner().get(0).getGennemfoertDato().matches("null"))
					{
						bPlan = i.getBehPlaner().get(0);
						if(value == null)
						{
						}
						else
						{
							if(value.toString() != bPlan.getRevurdering())
							{
								bPlan.setRevurdering(value.toString());
								iCtr.opdaterIndlaeggelse(i);
							}
							else
							{
								
							}
							
						}
					}
					else
					{
						bPlan = i.getBehPlaner().get(i.getBehPlaner().size()-1);
						if(value.toString() == null)
						{
							
						}
						else
						{
							if(value.toString() != bPlan.getRevurdering())
							{
								bPlan.setRevurdering(value.toString());
								iCtr.opdaterIndlaeggelse(i);
							}
							else
							{
								
							}
							
						}
					}
					
					
				}
				else
				{
					//ikke implementeret endnu
				}
			}
			if(column == 10)
			{

				if(value == null)
				{
					
				}
				else
				{
					String v = value.toString();
					if(v.length() == 0)
					{
						
					}
					else
					{
						String v1 = null;
						if(v.equals("true") || v.equals("ja"))
						{
							table.setValueAt("ja", row, column);
							v1 = "ja";
							
						}
						if(v.equals("false") || v.equals("nej"))
						{
							table.setValueAt("nej", row, column);
							v1 = "nej";
						}
						if(v1 != null)
						{
							boolean statement;
							if(v1 == "ja")
							{
								statement = true;
								if(statement != i.getPatient().isVoldsrisiko())
								{
									i.getPatient().setVoldsrisiko(true);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
							if(v1 == "nej")
							{
								statement = false;

								if(statement != i.getPatient().isVoldsrisiko())
								{
									i.getPatient().setVoldsrisiko(false);
									iCtr.opdaterIndlaeggelse(i);
								}
							}
						}
						else
						{
							if(i.getPatient().isVoldsrisiko() == true)
							{
								table.setValueAt("ja", row, column);
							}
							else
							{
								table.setValueAt("nej", row, column);
							}
							
						}
					}
				}
				
			}
			
		} 
		
		catch (Exception e) 
		{
			System.out.println("ExceptionCustomTable");
		}
		finally
		{
			return c;
		}
		
		
		
	}
	
	public boolean isInteger(String input)
	{
		try
		{
			Integer.parseInt(input);
			return true;
		}
		catch(Exception e)
		{
			return false;
		}
	}


}
